It is known to create customised documents using document templates or master documents. In our system, customised documents are generated using master documents which contain portions of document content, such as text or images, which are selectively incorporated into the resulting customised documents. For example, portions of document content included in the master document may be included in the final customised document only if certain conditions are satisfied. Such portions of document content may be referred to as conditional document content. The master document may also include portions of document content which are included unconditionally in the final customised document.
In one example, a social services document customised to a particular person who is the subject of the document may be generated from a master document. If the subject is pregnant then the final document may need to include a portion of text relating to the pregnancy. In this case the master document contains a specific text portion relating to pregnancy which is only included in the final customised document if it has been determined that the subject is actually pregnant. The final document may also need to include a standard clause which is included regardless of pregnancy but whose wording differs depending on whether the subject is male or female. In this case, the master document contains two text portions corresponding to the alternative clause wordings. One or the other of the two text portions is selectively included in the customised document depending on whether the subject is male or female.
The information required to generate a customised document may be represented by one or more variables. In the examples given above, a first variable ‘Pregnant’ which can take one of the two values ‘True’ or ‘False’ is used to represent whether the subject is pregnant or not. A second variable ‘Gender’ which can take one of the two values ‘Male’ or ‘Female’ is used to represent the gender of the subject. In our system, the variables may also take values indicating that the value of a variable is unknown or indefinite.
The variables associated with a master document may be used to form logical statements which may in turn be used to specify the conditions which need to be satisfied for each portion of document content to be included in the customised document. For example, the logical statement Gender IS ‘Female’ may be formed which evaluates to True if the subject is female and evaluates to False if the subject is male. This logical statement represents the condition which must be satisfied (i.e. evaluate to True) for the standard clause relating to female subjects to be included in the customised document. The simplest logical statement is a variable such as ‘Pregnant’, which can take the values True and False, appearing on its own. In this case the evaluation of the logical statement is simply the value of the variable. Such a variable, ‘Variable’, appearing on its own as a logical statement may be considered to be shorthand for Variable IS ‘True’. More complicated logical statements may also be formed by combining simpler statements using the logical operators AND, OR and NOT. For example, the logical statement (Gender IS ‘Female’) AND NOT(Pregnant) may be formed which evaluates to True only if the subject is female and not pregnant. The conditions (in the form of logical statements) which dictate whether particular portions of document content are included in the customised document may be referred to as usage statements.
The way in which portions of document content are incorporated into customised documents may be represented in the form of a mark-up of the master document. For example, a portion of conditional text in the master document may be indicated as such by enclosing the text in square bracket, [ . . . conditional text . . . ]. The usage statement associated with a particular portion of document content is indicated as superscript on the inside of the left-hand bracket associated with the portion of document content, [Usage Statement . . . conditional text . . . ]. The conditional document content is included in the customised document only if the usage statement associated with that conditional document content evaluates to true. For example, the mark-up [Gender IS ‘Male’ Text portion 1 . . . ] indicates that the text ‘Text portion 1 . . . ’ is included in the customised document only if the subject is male. Similarly, the mark-up [Pregnant Text portion 2 . . . ] indicates that the text ‘Text portion 2 . . . ’ is included in the customised document only if the subject is pregnant. In the example given above where alternative clause wordings are used depending on whether the subject is male or female, the master document contains [Gender IS ‘Male’ Clause wording 1 . . . ] [Gender IS ‘Female’ Clause wording 2 . . . ]. The position of the document content in the customised document depends on the position of the document content within the master document.
Variables such as ‘Name’ or ‘Address’ may also appear in the text portions. When a variable appears within a portion of text, the variable may be distinguished from the rest of the text by being shown between curly brackets, {variable}. One example of a conditional text portion illustrating this is [Pregnant The mother is {Name} who lives at {Address} . . . ].
Although the examples given above represents one form of mark-up, other forms of mark-up may also be used. Our U.S. patent application Ser. No. 10/434,753, incorporated herein by reference, discloses two different forms of mark-up notation and a system and method for converting a master document written in one mark-up notation to a master document written in a different mark-up notation. More complex mark-up notation may also be used. For example, our International patent applications, publication numbers WO 2005/024653, WO 2005/024654, WO 2005/024656 and WO 2005/024660, incorporated herein by reference, disclose several examples.
In order to generate a fully customised document it is necessary to determine the values of all the relevant variables so that the usage statements can be evaluated which in turn allows a determination to be made as to which of the portions of conditional document content to include in the final customised document. This information may be collected by means of a questionnaire which a user completes to assign values to the variables. In the examples given above, a user may be asked a first question enquiring as to the gender of the subject. A second question may then be asked enquiring as to whether the subject is pregnant. The questionnaire may be presented to the user in the form of a series of web pages for example in which the user types answers into text boxes or checks tick boxes corresponding to predefined alternative answers. The questionnaire may be generated automatically by analysing the master document and determining from the mark-up and the variables present which questions to ask. Our International patent applications, publication numbers WO 01/04772 and WO 03/061474, incorporated herein by reference, disclose systems and methods for generating a questionnaire from a master document.
In many cases, some variables may be relevant or not depending on the value of other variables. For example, if the subject is male then the variable ‘Pregnant’ is not relevant since in this case the subject can never be pregnant. A first variable may be said to be dependent on one or more further variable if an associated condition (in the form of a logical statement) involving the further variables must be satisfied (i.e. evaluate to true) for the first variable to be relevant. The first variable may be referred to as the dependent variable and the further variables may be referred to as the controlling variables. The associated condition which must be satisfied may be referred to as the conditional of the dependency. A conditional is usually in the form of an expression which specifies the values that should be assigned to each of the controlling variables. For example, the variable Pregnant is dependent on the controlling variable Gender because the conditional Gender IS ‘Female’ must evaluate to true for the variable Pregnant to be relevant.
If the values of one or more of the controlling variables of a dependent variable are unknown then the dependent variable may be regarded as being relevant. For example, if the gender of the subject is unknown then the variable ‘Pregnant’ is relevant. Conversely, a dependent variable is not relevant if, and only if, the conditional of the dependency can be definitely proven to be false. In short, a variable is not relevant if it can be determined that it is not required. In all other situations, it is necessary to assume that the variable may be needed, even if eventually, once all controlling variables are known, it turns out that the variable is not required.
The dependency between variables may be represented by a dependency network as disclosed in our provisional U.S. patent application Ser. No. 60/710,727, incorporated herein by reference.
The questionnaire may take variable dependencies into account by only asking those questions which are relevant. For example, if a user has indicated in a previous question that the subject is male then the question regarding pregnancy may be hidden from the user, greyed out or otherwise disabled so that the user cannot provide an answer. Since the relevance of dependent variables depends on the value of one or more controlling variables, when a question relating to a controlling variable is answered, a variable that depends on that controlling variable that was previously relevant may become irrelevant. Each time a question is answered, the questionnaire is arranged to dynamically update the enabling and disabling of questions based on the new information. For this reason, the questionnaire may be referred to as a dynamic questionnaire.
It is important that the behaviour of the questionnaire is proper in the sense that questions relating to irrelevant variables are disabled and questions relating to relevant variables are enabled. This behaviour is desirable to ensure that all relevant information is collected while avoiding collecting irrelevant information. Our earlier International patent application publication number WO 2005/024655, incorporated herein by reference, discloses a system and method for determining the relevance of variables by analysing the structure of a master document. A master document may contain several occurrences of a variable ‘V’ for example as part of usage statements or within portions of conditional text. The overall relevance of the variable ‘V’ is determined by considering the relevance of each individual occurrence of the variable in the master document. Then, if any of the occurrences of the variable are relevant then the variable is relevant overall. This is explained in greater detail below.
The overall relevance of a variable ‘V’ may be denoted by relevant(V) which evaluates to true if ‘V’ is relevant overall and evaluates to false if ‘V’ is not relevant overall. A variable is considered to be relevant overall if its value needs to be known to generate a customised document from the master document, considering all occurrences of the variable. The relevance of the kth occurrence of ‘V’ may be denoted by dependency(V)k. A particular occurrence of a variable is considered to be relevant if its value would need to be known to generate a customised document from the master document if that occurrence were the only one. Dependency(V)k consists of a logical expression, which may be referred to as a dependency statement, which is defined so that it evaluates to true if the kth occurrence of ‘V’ is relevant and evaluates to false if the kth occurrence of ‘V’ is not relevant. Where there are K occurrences of ‘V’, the relationship between relevant(V) and dependency(V)k is given byrelevant(V)=dependency(V)1 OR dependency(V)2 OR . . . dependency(V)K 
This ensures that if any one occurrence of V in the master document is relevant, in which case one of the dependency statements dependency(V)k will evaluate to true, then relevant(V) will evaluate to true meaning that V is relevant overall.
A number of examples of dependency statements will now be given involving the variable ‘Variable’. If the master document contains the conditional text [Usage Statement . . . {Variable} . . . ] then, considering this occurrence of the variable only, the variable is relevant only if the usage statement evaluates to true. This is because if the usage statement evaluates to false then the conditional text, along with this occurrence of the variable, would not be included in the customised document. If, however, the usage statement evaluates to true then the variable would appear in the customised document and it would be necessary therefore to determine the value of the variable. In this case, since the variable is relevant when the usage statement evaluates to true and not relevant when the usage statement evaluates to false, the dependency statement is the usage statement itself so that dependency(Variable)k=Usage Statement.
In the case where the variable is nested within two or more conditional portions of text such as [Usage Statement 1 . . . [Usage Statement 2 . . . [Usage Statement N . . . {Variable} . . . ]]] then the dependency statement for this particular occurrence of ‘Variable’ is dependency(Variable)k=Usage Statement 1 AND Usage Statement 2 AND . . . Usage Statement N. This is because the inner most conditional text portion containing the variable will be included in the customised document only if each of the surrounding text portion are also included. Hence, this particular occurrence of ‘Variable’ will be relevant only if all of the usage statements evaluate to true.
If a variable occurs within a usage statement then the relevance of that particular occurrence of the variable depends on the other variables within the usage statement. For example, if the master document contains the passage [Variable OR Variable 2 . . . conditional text . . . ], then ‘Variable’ is only relevant if ‘Variable 2’ is false. This is because if ‘Variable 2’ is true then the usage statement Variable OR Variable 2 evaluates to true regardless of the value of ‘Variable’. Therefore, if ‘Variable 2’ is true then the value of ‘Variable’ does not need to be known to evaluate the usage statement to determine whether the conditional text should be included in the customised document. In this case, this occurrence of ‘Variable’ is not relevant. If, however, the value of ‘Variable 2’ is false then the value of ‘Variable’ does need to be known to evaluate the usage statement. In this case, therefore, this occurrence of ‘Variable’ is relevant. It can be seen that the relevance of this particular occurrence of the variable is dependency(Variable)k=NOT(Variable 2).
In another similar example, if the master document contains the passage [Variable AND Variable 2 . . . conditional text . . . ], then ‘Variable’ is only relevant if ‘Variable 2’ is true. This is because if ‘Variable 2’ is false then the usage statement Variable AND variable 2 evaluates to false regardless of the value of ‘Variable’. Therefore, if ‘Variable 2’ is false then the value of ‘Variable’ does not need to be determined to evaluate the usage statement. In this case this occurrence of ‘Variable’ is not relevant. If, however, the value of ‘Variable 2’ is true then the value of ‘Variable’ does need to be determined to evaluate the usage statement. In this case, therefore, this occurrence of ‘Variable’ is relevant. It can be seen that the relevance of this particular occurrence of the variable is dependency (Variable)k=Variable 2.
In a third, and more complicated example, if the master document contains the passage [((Variable AND Variable 2) OR (Variable AND Variable 3)) OR Variable 4 . . . conditional text . . . ], it can be seen that the relevance of this occurrence of ‘Variable’ is given by dependency(Variable)k=(Variable 2 OR Variable 3) AND NOT(Variable 4). In general, for an occurrence of a first variable within a usage statement, the dependency statement is the logical statement involving other variables which evaluates to false if the value of the first variable does not need to be known to evaluate the usage statement and evaluates to true otherwise.
Once the dependency statements for each occurrence of a variable in the master document have been determined, the overall relevance of the variable can be determined by evaluating the statement relevant(V) as explained above. The questionnaire is then arranged to disable any questions relating to variables for which relevant(V) evaluates to false and to enable any questions relating to variables for which relevant(V) evaluates to true.
In an error free master document, the master document structure conforms with the dependency relationships between variables defined by the conditionals. In other words, the result in determining whether a variable is relevant or not should be the same using the expression relevant(V) and the conditionals.
One problem which the method described above is that errors may occur in the structure of the master document resulting in errors in customised documents generated using the master document. In master documents which are lengthy or which have complex structures, it may be difficult to spot such errors. We have appreciated the need for a system and method to allow accurate and efficient debugging of master documents.